package com.nuaa.qianru.mqtt;
 
 

import com.nuaa.qianru.dao.TpDao;
import com.nuaa.qianru.model.Machine;
import com.nuaa.qianru.model.Tp;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**  
 * 发布消息的回调类  
 *   
 * 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。  
 * 每个客户机标识都需要一个回调实例。在此示例中，构造函数传递客户机标识以另存为实例数据。
 * 在回调中，将它用来标识已经启动了该回调的哪个实例。  
 * 必须在回调类中实现三个方法：  
 *  public void messageArrived(MqttTopic topic, MqttMessage message)接收已经预订的发布。  
 *  public void connectionLost(Throwable cause)在断开连接时调用。  
 *  public void deliveryComplete(MqttDeliveryToken token))  
 *  接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。  
 *  由 MqttClient.connect 激活此回调。  
 */
@Component
public class PushCallback implements MqttCallback,MqttCallbackExtended {

	@Autowired
	TpDao tpDao;


  
    public void connectionLost(Throwable cause) {  
        // 连接丢失后，一般在这里面进行重连  
        System.out.println("连接断开，可以做重连");   
   
    }  
    
    public void deliveryComplete(IMqttDeliveryToken token) {
        System.out.println("deliveryComplete---------" + token.isComplete());  

    }
 
    public void messageArrived(String topic, MqttMessage message){
        // subscribe后得到的消息会执行到这里面
		

			/*
			 * System.out.println("接收消息主题 : " + topic); System.out.println("接收消息Qos : " +
			 * message.getQos()); System.out.println("接收消息内容 : " + new
			 * String(message.getPayload(),"UTF-8"));
			 */

		String payload = null;
		try {
			payload = new String(message.getPayload(),"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		String []strs=payload.split(",",-1); //字符分割
		Machine machine=new Machine();
		Date date = new Date();

		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		String str = format.format(date);
		if(!strs[0].equals("close")){
			machine.setMachineId("NC1");
			machine.setTime(str);
			machine.setMachineType(strs[0]);
			machine.setXPosition(Double.parseDouble(strs[1]));
			machine.setYPosition(Double.parseDouble(strs[2]));
			machine.setZPosition(Double.parseDouble(strs[3]));
			machine.setActFeedrate(Double.parseDouble(strs[4]));
			machine.setCmdFeedrate(Double.parseDouble(strs[5]));
			machine.setActSpeed(Double.parseDouble(strs[6]));
			machine.setCmdSpeed(Double.parseDouble(strs[7]));
			machine.setPro(strs[8]);
			machine.setProRow(Integer.parseInt(strs[9]));
			machine.setElectric(Double.parseDouble(strs[10]));
			machine.setAlarm(strs[11]);
			machine.setCount(Integer.parseInt(strs[12]));
			machine.setLeftTogo(strs[13]);

			try {
				tpDao.insertMachine1(machine);
			} catch (Exception e) {
				e.printStackTrace();
			}


		}
	 } 
	@Override
	public void connectComplete(boolean reconnect, String serverURI) {
	
		System.out.println("NC1连接成功");
		 try {
			Client.getClient().subscribe("NC1", 1);
		} catch (MqttException e) {
		
			e.printStackTrace();
		} 
	}
}
